package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.vo.PageResult;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

/**
 * @author 刘昱江
 * 时间 2021/5/11
 */
@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }

    @Override
    public String login(User user) {
        //1.将密码加密，一般可能添加  hash:公司域名
        //hash(www.baidu.com12345)
        String md5Pass = DigestUtils
                .md5DigestAsHex(user.getPassword().getBytes());
        //2.设置加密后的密码
        user.setPassword(md5Pass);
        //3.传入用户输入的数据作为where条件，有返回值表示输入正确
        User result = userMapper.selectOne(new QueryWrapper<>(user));
        //4.根据返回值返回token
        if (Objects.isNull(result)){
            return null;
        }else {
            //最好是通过UUID方式返回密钥
            //将“-”替换为空串
            return UUID.randomUUID().toString().replace("-", "");
        }
    }

    /**
     * 将后台数据实现分页查询
     * 查询第一页
     * select * from user limit 0,5
     * 查询第二页
     * select * from user limit 5,5
     * MP提供了分页查询方法，可以通过分页对象进行查询，获取到的是所有的分页相关的数据
     * selectPage(Ipage<T>,queryWrapper)
     * page：定义当前分页对象，页面/每页条数
     * @param pageResult
     * @return
     */
    @Override
    public PageResult findUserByPage(PageResult pageResult) {
        //传入当前页，和每页条数
        IPage<User> page = new Page<>(pageResult.getPageNum(), pageResult.getPageSize());
        //传入可能有的条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(StringUtils.hasLength(pageResult.getQuery())
                , "username"
                , pageResult.getQuery());
        //调用方法后返回的是IPage对象，使用刚才的page接取，里面包含了数据以及分页相关属性
        //多了总数和数据
        page = userMapper.selectPage(page, queryWrapper);
        //获取总数并放入PageResult
        pageResult.setTotal(page.getTotal())
                .setRows(page.getRecords());
        return pageResult;
    }

    @Override
    public void updateStatus(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void addUser(User user) {
        //1.密码加密
        String md5Pass = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        //2.启用账户
        user.setPassword(md5Pass)
                .setStatus(true)
                .setCreated(new Date())
                .setUpdated(user.getCreated());
        userMapper.insert(user);
    }

    @Override
    public void deleteUser(Integer id) {
        userMapper.deleteById(id);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }


}
